..
/
download
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- Made the pm ref in dmodules look like the dm ref format -->
<!-- added dmc to ids to make them unique in pubs -->
<!-- added link on dmRef to enable links on dmRefs in pubs -->
<xsl:template match="internalRef">
<!-- 3031 prohibits internal references to list. Added the following code to generate an error message if an internal reference points to a list item -->
<xsl:choose>
<xsl:when test="key('id',@internalRefId)/ancestor-or-self::listItem | key('id',@internalRefId)/ancestor-or-self::randomList | key('id',@internalRefId)/ancestor-or-self::sequentialList">
<fo:block color="red">
<xsl:text>Error: Internal reference to list element prohibited. </xsl:text>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:basic-link>
<!-- added dmc to ids to make them unique in pubs -->
<xsl:attribute name="internal-destination"><xsl:apply-templates select="//dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode"/><xsl:value-of select="@internalRefId"/></xsl:attribute>
<xsl:variable name="targetElement" select="local-name(key('id',@internalRefId))"/>
<xsl:for-each select="key('id',(@internalRefId))">
<xsl:choose>
<xsl:when test="$targetElement='figure'">
<xsl:text disable-output-escaping="no">Figure </xsl:text>
<xsl:number count="figure" from="content" level="any"/>
</xsl:when>
<xsl:when test="$targetElement='hotspot'">
<xsl:text disable-output-escaping="no">Figure </xsl:text>
<xsl:number count="figure" from="content" level="any"/>
<xsl:if test="@hotspotType='CALLOUT'">
<xsl:text>, Item </xsl:text>
<xsl:value-of select="@applicationStructureName"/>
</xsl:if>
</xsl:when>
<xsl:when test="$targetElement='table' or $targetElement='reqCondGroup' or $targetElement='reqSupportEquips' or $targetElement='reqSupplies' or $targetElement='reqSpares' or $targetElement='reqPersons' or $targetElement='reqTechInfoGroup'">
<xsl:text disable-output-escaping="no">Table </xsl:text>
<xsl:call-template name="number-tables"/>
</xsl:when>
<xsl:when test="$targetElement='levelledPara'">
<xsl:text disable-output-escaping="no">Para </xsl:text>
<xsl:number count="levelledPara" from="content" level="multiple" format="1.1.1.1.1"/>
</xsl:when>
<xsl:when test="$targetElement='proceduralStep'">
<xsl:text disable-output-escaping="no">Step </xsl:text>
<xsl:number count="proceduralStep" from="content" level="multiple" format="1.1.1.1.1"/>
</xsl:when>
<xsl:when test="$targetElement='supportEquipDescr'">
<xsl:value-of select="name"/>
</xsl:when>
<xsl:when test="$targetElement='supplyDescr'">
<xsl:value-of select="name"/>
</xsl:when>
<xsl:when test="$targetElement='spareDescr'">
<xsl:value-of select="name"/>
</xsl:when>
<xsl:otherwise>
<fo:inline color="red">
<xsl:text>The Army does not allow an internal reference to </xsl:text>
<xsl:value-of select="$targetElement"/>
</fo:inline>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</fo:basic-link>
<!--
<fo:basic-link internal-destination="{@internalRefId}">
<xsl:apply-templates mode="xref" select="key('id',@internalRefId)"/>
</fo:basic-link>
-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- From S1000D:
References to data modules and technical publications are presented in lexical order, with data modules first, in the beginning of a data module under the caption "References".
The references table is presented under the caption References (Centerhead No.2) as Table 1 with the table title References.
The table presents the data module code, the publication module code or a non S1000D publication code together with the corresponding title, as given by the element <refs>.
The data module reference is derived from the element <dmRef>.
The publication module reference is derived from the element <pmRef>.
A non S1000D publication reference is derived from the element <externalPubRef> using the element <externalPubCode> and/or the element <externalPubTitle> contained in element <externalPubRefIdent>.
The absence of the element <refs> will be presented with "None".
-->
<xsl:template name="process-refs">
<fo:block xsl:use-attribute-sets="centerhead2">
<xsl:text>References</xsl:text>
</fo:block>
<fo:block span="all">
<fo:table-and-caption>
<fo:table-caption>
<fo:block font-weight="bold" keep-with-previous.within-column="always" keep-with-previous.within-page="always" space-after.maximum="10pt" space-after.minimum="10pt" space-after.optimum="10pt" space-before.maximum="12pt" space-before.minimum="8pt" space-before.optimum="10pt" span="all" text-align="center">
<xsl:text disable-output-escaping="no">Table 1 </xsl:text>
<xsl:text> References</xsl:text>
</fo:block>
</fo:table-caption>
<xsl:call-template name="refsTable"/>
</fo:table-and-caption>
</fo:block>
</xsl:template>
<xsl:template name="refsTable">
<fo:table xsl:use-attribute-sets="standard.table.setup">
<fo:table-column column-number="1" column-width="45%"/>
<fo:table-column column-number="2" column-width="55%"/>
<fo:table-header text-align="left" space-before="10pt" space-after="10pt" border-after-style="solid" border-after-width="0.25pt">
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block xsl:use-attribute-sets="column-title">Chap No./Document No.</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block xsl:use-attribute-sets="column-title">Title</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:choose>
<xsl:when test="refs">
<xsl:call-template name="SortDmRefs"/>
<xsl:call-template name="SortPmRefs"/>
<xsl:call-template name="SortExternalPubRefs"/>
</xsl:when>
<xsl:otherwise>
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:text>None</xsl:text>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template name="SortDmRefs">
<xsl:for-each select="refs/dmRef/dmRefIdent/dmCode">
<xsl:sort select="@modelIdentCode"/>
<xsl:sort select="@systemDiffCode"/>
<xsl:sort select="@systemCode"/>
<xsl:sort select="@subSystemCode"/>
<xsl:sort select="@subSubSystemCode"/>
<xsl:sort select="@assycode"/>
<xsl:sort select="@disassyCode"/>
<xsl:sort select="@disassyCodeVariant"/>
<xsl:sort select="@infoCode"/>
<xsl:sort select="@infoCodeVariant"/>
<xsl:sort select="@itemLocationCode"/>
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="@modelIdentCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@systemDiffCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@systemCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@subSystemCode"/>
<xsl:value-of select="@subSubSystemCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@assyCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@disassyCode"/>
<xsl:value-of select="@disassyCodeVariant"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@infoCode"/>
<xsl:value-of select="@infoCodeVariant"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@itemLocationCode"/>
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="ancestor::dmRef/dmRefAddressItems//techName"/>
<xsl:text> - </xsl:text>
<xsl:value-of select="ancestor::dmRef/dmRefAddressItems//infoName"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</xsl:template>
<xsl:template name="SortPmRefs">
<xsl:for-each select="refs/pmRef/pmRefIdent/pmCode">
<xsl:sort select="@modelIdentCode"/>
<xsl:sort select="@pmNumber"/>
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="@pmNumber"/>
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="ancestor::pmRef/pmRefAddressItems//pmTitle"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</xsl:template>
<xsl:template name="SortExternalPubRefs">
<xsl:for-each select="refs/externalPubRef">
<xsl:sort select="externalPubRef/externalPubRefIdent/externalPubCode"/>
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="externalPubRefIdent/externalPubCode"/>
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
<fo:block>
<xsl:value-of select="externalPubRefIdent/externalPubTitle"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</xsl:template>
<xsl:template match="refs"/>
<xsl:template match="/dmodule//*//dmRef">
<fo:basic-link>
<xsl:attribute name="internal-destination"><xsl:apply-templates select="dmRefIdent/dmCode"/></xsl:attribute>
<xsl:apply-templates select="dmRefAddressItems/dmTitle"/>
<xsl:text> [</xsl:text>
<xsl:apply-templates select="dmRefIdent/dmCode"/>
<xsl:text>]</xsl:text>
</fo:basic-link>
</xsl:template>
<xsl:template match="/dmodule//*//dmRefIdent">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="dmRefAddressItems">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="pmRef">
<xsl:choose>
<xsl:when test="ancestor::refs"/>
<!-- Made the pm ref in dmodules look like the dm ref format -->
<xsl:when test="ancestor::dmodule">
<xsl:apply-templates select="pmRefAddressItems/pmTitle"/>
<xsl:text> [</xsl:text>
<xsl:apply-templates select="pmRefIdent/pmCode"/>
<xsl:text>] </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="pmRefIdent">
<xsl:apply-templates/>
</xsl:template>
<!-- added template for pmRefAddressItems-->
<xsl:template match="pmRefAddressItems">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="pmCode">
<xsl:value-of select="@modelIdentCode"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@pmIssuer"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@pmNumber"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="@pmVolume"/>
</xsl:template>
<xsl:template match="externalPubRef">
<xsl:choose>
<xsl:when test="ancestor-or-self::refs"/>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="externalPubRefIdent">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="externalPubCode">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="externalPubTitle">
<xsl:choose>
<xsl:when test="ancestor::toolRef"/>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="toolRef">
<xsl:text>Tool</xsl:text>
<xsl:choose>
<xsl:when test="@manufacturerCodeValue">
<xsl:text>/MFR </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="@toolNumber"/>
<xsl:if test="@manufacturerCodeValue">
<xsl:value-of select="@manufacturerCodeValue"/>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="toolRef/refs">
<xsl:apply-templates select="externalPubCode"/>
</xsl:template>
<xsl:template match="catalogSeqNumberRef">
<xsl:choose>
<xsl:when test="@itemSeqNumberValue">
<xsl:text>CSN/ISN </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>CSN </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="@catalogSeqNumberValue"/>
<xsl:if test="@itemSeqNumberValue">
<xsl:text>/</xsl:text>
<xsl:value-of select="@itemSeqNumberValue"/>
</xsl:if>
<!--<xsl:if test="refs">
<xsl:text> /</xsl:text>
<fo:block/>
</xsl:if>
<xsl:apply-templates select="refs"/>-->
</xsl:template>
<xsl:template match="catalogSeqNumberRef/refs">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="controlIndicatorRef">
<xsl:choose>
<xsl:when test="ancestor::controlIndicatorRepository">
<fo:basic-link internal-destination="{@controlIndicatorNumber}">
<xsl:apply-templates select="key('id',@controlIndicatorNumber)"/>
<xsl:value-of select="controlIndicatorName"/>
</fo:basic-link>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="child::refs/dmRef">
<xsl:variable name="controlNumber">
<xsl:value-of select="@controlIndicatorNumber"/>
</xsl:variable>
<xsl:variable name="externalFile">
<xsl:text>DMC-</xsl:text>
<xsl:apply-templates select="refs/dmRef"/>
<xsl:choose>
<xsl:when test="refs/dmRef/dmRefIdent/issueInfo">
<xsl:text>_</xsl:text>
<xsl:value-of select="//issueInfo/@issueNumber"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="//issueInfo/@inWork"/>
<xsl:text>_EN-US.xml</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>_001-00_EN-US.xml</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="externalFileNoSpace">
<xsl:value-of select="normalize-space($externalFile)"/>
</xsl:variable>
<xsl:for-each select="document(translate($externalFileNoSpace,' ',''))/dmodule/content/techRepository/controlIndicatorRepository/controlIndicatorGroup/controlIndicatorSpec">
<xsl:if test="@controlIndicatorNumber=$controlNumber">
<fo:inline text-transform="lowercase">
<xsl:value-of select="controlIndicatorName"/>
</fo:inline>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@controlIndicatorNumber"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
gopher://khzae.net/0/s1000d/links/projects/3031/Army S1000D Stylesheets/FO-3031-A00-USARMY-REFS_001-00_EN-US.xsl